﻿#include <windows.h>
#include "resource.h"
#include "../ITCatTableControl/ITCatTableControl.h"

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    static ITCatTableControl* pCtrl = nullptr;
    switch (message)
    {
    case WM_INITDIALOG:
    {
        // 居中主对话框
        RECT rcDlg, rcScreen;
        GetWindowRect(hDlg, &rcDlg);
        rcScreen.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
        rcScreen.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
        rcScreen.right = rcScreen.left + GetSystemMetrics(SM_CXVIRTUALSCREEN);
        rcScreen.bottom = rcScreen.top + GetSystemMetrics(SM_CYVIRTUALSCREEN);
        int dlgWidth = rcDlg.right - rcDlg.left;
        int dlgHeight = rcDlg.bottom - rcDlg.top;
        int x = rcScreen.left + (rcScreen.right - rcScreen.left - dlgWidth) / 2;
        int y = rcScreen.top + (rcScreen.bottom - rcScreen.top - dlgHeight) / 2;
        SetWindowPos(hDlg, NULL, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE);

        // 获取自定义控件句柄
        HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
        
        // 等待控件实例创建完成
        Sleep(100);
        
        pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
        if (pCtrl) {
            // 创建 ImageList 并添加图标
            HIMAGELIST hImageList = ImageList_Create(32, 32, ILC_COLOR32 | ILC_MASK, 2, 0);
            if (hImageList) {
                // 获取当前模块句柄
                HINSTANCE hInstance = GetModuleHandle(NULL);
                // 加载图标资源
                HICON hIcon1 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SRUN));
                HICON hIcon2 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SSTOP));
                
                if (hIcon1) {
                    ImageList_ReplaceIcon(hImageList, -1, hIcon1);
                }
                if (hIcon2) {
                    ImageList_ReplaceIcon(hImageList, -1, hIcon2);
                }
                
                // 设置 ImageList 到控件
                pCtrl->SetImageList(hImageList, 32);
            }
            
            // 添加列
            pCtrl->AddColumn(L"姓名", 120);
            pCtrl->AddColumn(L"年龄", 80);
            pCtrl->AddColumn(L"城市", 120);
            pCtrl->AddColumn(L"电话", 150);
            pCtrl->AddColumn(L"邮箱", 200);
            pCtrl->AddColumn(L"地址", 250);
            pCtrl->AddColumn(L"部门", 100);
            pCtrl->AddColumn(L"职位", 120);
            
            // 设置一些列的对齐方式
            if (pCtrl->columns.size() >= 2) pCtrl->columns[1]->alignment = ITCatTableBase::LVCA_CENTER;  // 年龄列居中
            if (pCtrl->columns.size() >= 3) pCtrl->columns[2]->alignment = ITCatTableBase::LVCA_LEFT;     // 城市列左对齐
            if (pCtrl->columns.size() >= 4) pCtrl->columns[3]->alignment = ITCatTableBase::LVCA_RIGHT;    // 电话列右对齐
            // 添加行
            pCtrl->AddRow(L"张三", {L"张三", L"25", L"北京", L"13800138001", L"zhangsan@email.com", L"北京市朝阳区", L"技术部", L"工程师"});
            pCtrl->AddRow(L"李四", {L"李四", L"30", L"上海", L"13800138002", L"lisi@email.com", L"上海市浦东新区", L"市场部", L"经理"});
            pCtrl->AddRow(L"王五", {L"王五", L"28", L"广州", L"13800138003", L"wangwu@email.com", L"广州市天河区", L"销售部", L"主管"});
            pCtrl->AddRow(L"赵六", {L"赵六", L"22", L"深圳", L"13800138004", L"zhaoliu@email.com", L"深圳市南山区", L"人事部", L"专员"});
            pCtrl->AddRow(L"孙七", {L"孙七", L"35", L"杭州", L"13800138005", L"sunqi@email.com", L"杭州市西湖区", L"财务部", L"总监"});
            
            // 设置前几行的图标索引
            if (pCtrl->rows.size() >= 1) pCtrl->rows[0]->iconIndex = 0;  // 第一行使用第一个图标
            if (pCtrl->rows.size() >= 2) pCtrl->rows[1]->iconIndex = 1;  // 第二行使用第二个图标
            if (pCtrl->rows.size() >= 3) pCtrl->rows[2]->iconIndex = 0;  // 第三行使用第一个图标
            if (pCtrl->rows.size() >= 4) pCtrl->rows[3]->iconIndex = 1;  // 第四行使用第二个图标
            if (pCtrl->rows.size() >= 5) pCtrl->rows[4]->iconIndex = 0;  // 第五行使用第一个图标
            pCtrl->AddRow(L"周八", {L"周八", L"27", L"南京", L"13800138006", L"zhouba@email.com", L"南京市鼓楼区", L"运营部", L"专员"});
            pCtrl->AddRow(L"吴九", {L"吴九", L"33", L"武汉", L"13800138007", L"wujiu@email.com", L"武汉市江汉区", L"技术部", L"架构师"});
            pCtrl->AddRow(L"郑十", {L"郑十", L"29", L"成都", L"13800138008", L"zhengshi@email.com", L"成都市锦江区", L"市场部", L"专员"});
            pCtrl->AddRow(L"钱一", {L"钱一", L"31", L"西安", L"13800138009", L"qianyi@email.com", L"西安市雁塔区", L"销售部", L"经理"});
            pCtrl->AddRow(L"孙二", {L"孙二", L"26", L"重庆", L"13800138010", L"suner@email.com", L"重庆市渝中区", L"人事部", L"主管"});
            pCtrl->AddRow(L"李三", {L"李三", L"34", L"天津", L"13800138011", L"lisan@email.com", L"天津市和平区", L"财务部", L"经理"});
            pCtrl->AddRow(L"王四", {L"王四", L"24", L"苏州", L"13800138012", L"wangsi@email.com", L"苏州市姑苏区", L"运营部", L"专员"});
            pCtrl->AddRow(L"赵五", {L"赵五", L"32", L"无锡", L"13800138013", L"zhaowu@email.com", L"无锡市梁溪区", L"技术部", L"工程师"});
            pCtrl->AddRow(L"孙六", {L"孙六", L"28", L"宁波", L"13800138014", L"sunliu@email.com", L"宁波市海曙区", L"市场部", L"专员"});
            pCtrl->AddRow(L"孙七", {L"孙七", L"35", L"杭州", L"13800138015", L"sunqi2@email.com", L"杭州市滨江区", L"销售部", L"总监"});
            pCtrl->AddRow(L"周八", {L"周八", L"29", L"南京", L"13800138016", L"zhouba2@email.com", L"南京市建邺区", L"人事部", L"经理"});
            pCtrl->AddRow(L"吴九", {L"吴九", L"31", L"武汉", L"13800138017", L"wujiu2@email.com", L"武汉市武昌区", L"财务部", L"主管"});

            pCtrl->SetRowHeight(1, 50);
            pCtrl->SetRowHeight(7, 50);
            pCtrl->SetRowHeight(15, 50);
            pCtrl->SetRowHeight(16, 40);
            pCtrl->SetRowHeaderStyle(ITCatTableBase::ROWHEADER_ICON);
            
            // 设置按钮初始文本
            SetDlgItemText(hDlg, IDC_BUTTON_SWITCH_MODE, L"图标");
            
            // 设置事件回调
            pCtrl->SetEventCallback([](const TABLE_EVENT_DATA& eventData) {
                // 事件回调 - 可以根据需要添加自定义处理逻辑
                switch (eventData.eventType) {
                case TABLE_EVENT_SELECTION_CHANGED:
                    // 选中状态改变事件
                    break;
                    
                case TABLE_EVENT_RIGHT_CLICK:
                    // 右键点击事件
                    break;
                    
                case TABLE_EVENT_EDIT_COMPLETED:
                    // 编辑完成事件
                    break;
                    
                case TABLE_EVENT_EDIT_CANCELLED:
                    // 编辑取消事件
                    break;
                    
                case TABLE_EVENT_HEADER_CLICK:
                    // 列标题点击事件
                    break;
                    
                case TABLE_EVENT_ROW_HEADER_CLICK:
                    // 行标题点击事件
                    break;
                }
            });
            
            // 测试单元格合并功能
            // 设置第1行第1列跨2列
            pCtrl->SetCellColspan(0, 0, 2);
            pCtrl->SetCellRowspan(0, 0, 2);
            // 设置第1行第2列为被合并状态
            pCtrl->SetCellColspan(0, 1, 0);
            pCtrl->SetCellRowspan(0, 1, 0);
            // 设置第2行第1列为被合并状态
            pCtrl->SetCellColspan(1, 0, 0);
            pCtrl->SetCellRowspan(1, 0, 0);
            // 设置第2行第2列为被合并状态（2x2合并的右下角单元格）
            pCtrl->SetCellColspan(1, 1, 0);
            pCtrl->SetCellRowspan(1, 1, 0);
            
            // 设置第3行第3列跨2行
            pCtrl->SetCellRowspan(2, 2, 2);
            // 设置第4行第3列为被合并状态
            pCtrl->SetCellColspan(3, 2, 0);
            pCtrl->SetCellRowspan(3, 2, 0);
            
            // 设置第5行第5列跨2列2行
            pCtrl->SetCellSpan(4, 4, 2, 2);
            // 设置相关单元格为被合并状态
            pCtrl->SetCellSpan(4, 5, 0, 0); // 第5行第6列
            pCtrl->SetCellSpan(5, 4, 0, 0); // 第6行第5列
            pCtrl->SetCellSpan(5, 5, 0, 0); // 第6行第6列
            
            // 手动更新滚动条信息
            pCtrl->UpdateScrollInfo(hCtrl);
            
            // 启用选中功能
            pCtrl->SetMultiSelect(true);  // 启用多选
            pCtrl->SetFullRowSelect(false);  // 默认单元格选择模式
            
            pCtrl->SetFullRowSelect(true);
            // 测试选中功能 - 选中第3行
            pCtrl->SelectRow(2);
            
            // 测试分隔行功能
            pCtrl->SetRowAsSeparator(5, true);  // 设置第6行为分隔行
            pCtrl->SetRowAsSeparator(10, true); // 设置第11行为分隔行
            
            // 为分隔行设置文本（设置到第一个单元格中）
            if (pCtrl->rows.size() > 5 && pCtrl->rows[5]->cells.size() > 0) {
                pCtrl->rows[5]->cells[0]->setText(L"=== 技术部门 ===");
            }
            if (pCtrl->rows.size() > 10 && pCtrl->rows[10]->cells.size() > 0) {
                pCtrl->rows[10]->cells[0]->setText(L"=== 管理部门 ===");
            }
            
            // 设置分隔行对齐方式
            pCtrl->SetSeparatorAlignment(ITCatTableBase::LVCA_LEFT);  // 左对齐
            // 或者使用其他对齐方式：
            // pCtrl->SetSeparatorAlignment(ITCatTableBase::LVCA_CENTER);  // 居中对齐
            // pCtrl->SetSeparatorAlignment(ITCatTableBase::LVCA_RIGHT);   // 右对齐
            
            // 测试颜色继承系统
            // 设置第3行的背景色为浅蓝色
            pCtrl->SetRowBackgroundColor(2, RGB(200, 220, 255));
            
            // 设置第4行的文本颜色为红色
            pCtrl->SetRowTextColor(3, RGB(255, 0, 0));
            
            // 设置第1行第2列的背景色为黄色
            pCtrl->SetCellBackgroundColor(0, 1, RGB(255, 255, 200));
            
            // 设置第2行第3列的文本颜色为绿色
            pCtrl->SetCellTextColor(1, 2, RGB(0, 128, 0));
            
            // 测试不同类型的编辑控件
            // 第1列保持默认的文本框类型
            if (pCtrl->columns.size() > 0) {
                pCtrl->columns[0]->editable = true; // 启用编辑
            }
            if (pCtrl->columns.size() > 1) {
                pCtrl->columns[1]->edittype = ITCatTableColumn::EDIT_COMBOBOX; // 第2列设为组合框
                pCtrl->columns[1]->editable = true; // 启用编辑
            }
            if (pCtrl->columns.size() > 2) {
                pCtrl->columns[2]->edittype = ITCatTableColumn::EDIT_DROPDOWN; // 第3列设为下拉列表
                pCtrl->columns[2]->editable = true; // 启用编辑
            }
            if (pCtrl->columns.size() > 3) {
                pCtrl->columns[3]->edittype = ITCatTableColumn::EDIT_CHECKBOX; // 第4列设为复选框
                pCtrl->columns[3]->editable = true; // 启用编辑
            }
            if (pCtrl->columns.size() > 4) {
                pCtrl->columns[4]->edittype = ITCatTableColumn::EDIT_SPIN; // 第5列设为数字微调框
                pCtrl->columns[4]->editable = true; // 启用编辑
            }
            
            // 测试编辑功能说明
            // 双击单元格可以开始编辑
            // 按回车键提交编辑
            // 按ESC键取消编辑
            // 按F2键也可以开始编辑当前选中的单元格
            // 不同列使用不同类型的编辑控件
            
            // 触发重绘
            InvalidateRect(hCtrl, NULL, TRUE);
        }
        return TRUE;
    }
    case WM_PAINT:
    {
        // 让控件自己绘制
        HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
        ITCatTableControl* pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
        //if (pCtrl) {
            //pCtrl->OnDraw(hCtrl);
        //}
        break;
    }
    case WM_TABLE_EVENT:
        {
            const TABLE_EVENT_DATA* pEventData = (const TABLE_EVENT_DATA*)lParam;
            if (pEventData) {
                switch (pEventData->eventType) {
                case TABLE_EVENT_SELECTION_CHANGED:
                    // 选中状态改变事件
                    break;
                    
                case TABLE_EVENT_RIGHT_CLICK:
                    {
                        // 创建右键菜单
                        HMENU hMenu = CreatePopupMenu();
                        if (hMenu) {
                            // 获取控件实例
                            HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
                            ITCatTableControl* pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
                            
                            // 构建菜单文本
                            std::wstring menuText;
                            std::wstring coordText = L"坐标: (" + std::to_wstring(pEventData->clickPoint.x) + L", " + std::to_wstring(pEventData->clickPoint.y) + L")";
                            
                            if (pEventData->rowIndex == -1 && pEventData->colIndex == -1) {
                                menuText = L"空白区域";
                            } else if (pEventData->rowIndex == -2) {
                                menuText = L"列标题区域";
                                if (pEventData->colIndex >= 0 && pCtrl && pEventData->colIndex < pCtrl->columns.size()) {
                                    std::wstring colText = pCtrl->columns[pEventData->colIndex]->getText();
                                    menuText += L" - 列 " + std::to_wstring(pEventData->colIndex + 1) + L": " + colText;
                                }
                            } else if (pEventData->colIndex == -2) {
                                menuText = L"行标题区域";
                                if (pEventData->rowIndex >= 0 && pCtrl && pEventData->rowIndex < pCtrl->rows.size()) {
                                    menuText += L" - 行 " + std::to_wstring(pEventData->rowIndex + 1);
                                    std::wstring rowText = pCtrl->rows[pEventData->rowIndex]->getText();
                                    if (!rowText.empty()) {
                                        menuText += L": " + rowText;
                                    }
                                }
                            } else if (pEventData->rowIndex >= 0 && pEventData->colIndex >= 0) {
                                menuText = L"单元格";
                                if (pCtrl && pEventData->rowIndex < pCtrl->rows.size() && pEventData->colIndex < pCtrl->columns.size()) {
                                    menuText += L" - 行 " + std::to_wstring(pEventData->rowIndex + 1) + L", 列 " + std::to_wstring(pEventData->colIndex + 1);
                                    std::wstring colText = pCtrl->columns[pEventData->colIndex]->getText();
                                    menuText += L" (" + colText + L")";
                                    
                                    // 添加单元格内容信息
                                    if (pEventData->colIndex < pCtrl->rows[pEventData->rowIndex]->cells.size()) {
                                        std::wstring cellText = pCtrl->rows[pEventData->rowIndex]->cells[pEventData->colIndex]->getText();
                                        if (!cellText.empty()) {
                                            menuText += L"\n内容: " + cellText;
                                        }
                                    }
                                }
                            } else {
                                menuText = L"未知区域";
                            }
                            
                            // 添加菜单项
                            AppendMenuW(hMenu, MF_STRING, 1001, menuText.c_str());
                            AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
                            AppendMenuW(hMenu, MF_STRING, 1002, coordText.c_str());
                            
                            // 添加操作菜单项
                            AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
                            AppendMenuW(hMenu, MF_STRING, 1003, L"复制坐标信息");
                            AppendMenuW(hMenu, MF_STRING, 1004, L"查看详细信息");
                            
                            // 显示菜单
                            POINT pt = pEventData->clickPoint;
                            ClientToScreen(hDlg, &pt);
                            int menuResult = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL);
                            
                            // 处理菜单选择
                            switch (menuResult) {
                            case 1003: // 复制坐标信息
                                {
                                    std::wstring coordInfo = L"坐标: (" + std::to_wstring(pEventData->clickPoint.x) + L", " + std::to_wstring(pEventData->clickPoint.y) + L")";
                                    if (OpenClipboard(hDlg)) {
                                        EmptyClipboard();
                                        HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, (coordInfo.length() + 1) * sizeof(wchar_t));
                                        if (hGlobal) {
                                            wchar_t* pData = (wchar_t*)GlobalLock(hGlobal);
                                            wcscpy_s(pData, coordInfo.length() + 1, coordInfo.c_str());
                                            GlobalUnlock(hGlobal);
                                            SetClipboardData(CF_UNICODETEXT, hGlobal);
                                        }
                                        CloseClipboard();
                                    }
                                    MessageBoxW(hDlg, L"坐标信息已复制到剪贴板", L"提示", MB_OK | MB_ICONINFORMATION);
                                }
                                break;
                                
                            case 1004: // 查看详细信息
                                {
                                    std::wstring detailInfo = L"详细信息:\n";
                                    detailInfo += L"坐标: (" + std::to_wstring(pEventData->clickPoint.x) + L", " + std::to_wstring(pEventData->clickPoint.y) + L")\n";
                                    detailInfo += L"行索引: " + std::to_wstring(pEventData->rowIndex) + L"\n";
                                    detailInfo += L"列索引: " + std::to_wstring(pEventData->colIndex) + L"\n";
                                    
                                    if (pCtrl && pEventData->rowIndex >= 0 && pEventData->colIndex >= 0) {
                                        if (pEventData->rowIndex < pCtrl->rows.size() && pEventData->colIndex < pCtrl->columns.size()) {
                                            std::wstring colText = pCtrl->columns[pEventData->colIndex]->getText();
                                            detailInfo += L"列标题: " + colText + L"\n";
                                            detailInfo += L"列宽度: " + std::to_wstring(pCtrl->columns[pEventData->colIndex]->width) + L"\n";
                                            
                                            if (pEventData->colIndex < pCtrl->rows[pEventData->rowIndex]->cells.size()) {
                                                std::wstring cellText = pCtrl->rows[pEventData->rowIndex]->cells[pEventData->colIndex]->getText();
                                                detailInfo += L"单元格内容: " + cellText + L"\n";
                                            }
                                        }
                                    }
                                    
                                    MessageBoxW(hDlg, detailInfo.c_str(), L"详细信息", MB_OK | MB_ICONINFORMATION);
                                }
                                break;
                            }
                            
                            // 清理菜单
                            DestroyMenu(hMenu);
                        }
                    }
                    break;
                    
                case TABLE_EVENT_EDIT_COMPLETED:
                    // 编辑完成事件
                    break;
                    
                case TABLE_EVENT_EDIT_CANCELLED:
                    // 编辑取消事件
                    break;
                    
                case TABLE_EVENT_HEADER_CLICK:
                    // 列标题点击事件
                    break;
                    
                case TABLE_EVENT_ROW_HEADER_CLICK:
                    // 行标题点击事件
                    break;
                }
            }
            return TRUE;
        }
        break;
    case WM_COMMAND:
        if (LOWORD(wParam) == IDCANCEL)
        {
            DestroyWindow(hDlg);
            PostQuitMessage(0);
            return TRUE;
        }
        else if (LOWORD(wParam) == IDC_BUTTON_SWITCH_MODE)
        {
            // 切换行标题样式
            HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
            ITCatTableControl* pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
            if (pCtrl) {
                static int currentStyle = 0;
                const int styles[] = {
                    ITCatTableBase::ROWHEADER_TEXT,      // 文本
                    ITCatTableBase::ROWHEADER_NUMBER,    // 序号
                    ITCatTableBase::ROWHEADER_CHECKBOX,  // 复选框
                    ITCatTableBase::ROWHEADER_ICON       // 图标
                };
                
                currentStyle = (currentStyle + 1) % 4;
                pCtrl->SetRowHeaderStyle(styles[currentStyle]);
                
                // 更新按钮文本
                const wchar_t* buttonTexts[] = {L"文本", L"序号", L"复选框", L"图标"};
                SetDlgItemText(hDlg, IDC_BUTTON_SWITCH_MODE, buttonTexts[currentStyle]);
                
                InvalidateRect(hCtrl, NULL, TRUE);
            }
            return TRUE;
        }
        else if (LOWORD(wParam) == IDC_BUTTON_TOGGLE_ROW_HEADER)
        {
            // 切换行标题显示/隐藏
            HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
            ITCatTableControl* pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
            if (pCtrl) {
                static bool rowHeaderVisible = true;
                rowHeaderVisible = !rowHeaderVisible;
                pCtrl->SetRowHeaderVisible(rowHeaderVisible);
                
                // 更新按钮文本
                SetDlgItemText(hDlg, IDC_BUTTON_TOGGLE_ROW_HEADER, 
                              rowHeaderVisible ? L"隐藏行标题" : L"显示行标题");
                
                InvalidateRect(hCtrl, NULL, TRUE);
            }
            return TRUE;
        }
        break;
        
    case WM_CLOSE:
        DestroyWindow(hDlg);
        PostQuitMessage(0);
        return TRUE;
        
    case WM_KEYDOWN:
        // 检查是否在编辑状态下，如果是则拦截回车键
        {
            HWND hCtrl = GetDlgItem(hDlg, IDC_CUSTOM1);
            if (hCtrl) {
                ITCatTableControl* pCtrl = (ITCatTableControl*)GetWindowLongPtr(hCtrl, GWLP_USERDATA);
                if (pCtrl && pCtrl->IsEditing()) {
                    // 如果正在编辑，拦截回车键和ESC键
                    switch (wParam) {
                    case VK_RETURN:
                    case VK_ESCAPE:
                        return TRUE; // 阻止消息传递给对话框
                    }
                }
            }
        }
        break;
    }
    return FALSE;
}

int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    SetProcessDPIAware(); // 让进程DPI感知，需在窗口创建前调用
    if (!ITCatTableControl::RegisterControlClass(hInstance)) {
        return -1; // 注册控件失败，直接返回错误码
    }

    // 使用模态对话框
    INT_PTR result = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DlgProc, 0);
    
    ITCatTableControl::UnregisterControlClass(hInstance);
    return (int)result;
} 